// 检查是否在浏览器环境中
const isBrowser = typeof window !== 'undefined';

// 文件类型映射
export const FILE_TYPE_MAP: Record<string, string> = {
  'jpg': 'image',
  'jpeg': 'image',
  'png': 'image',
  'gif': 'image',
  'webp': 'image',
  'bmp': 'image',
  'svg': 'image',
  'mp4': 'video',
  'avi': 'video',
  'mov': 'video',
  'wmv': 'video',
  'flv': 'video',
  'mkv': 'video',
  'mp3': 'audio',
  'wav': 'audio',
  'flac': 'audio',
  'aac': 'audio',
  'ogg': 'audio',
  'txt': 'text',
  'md': 'markdown',
  'doc': 'text',
  'docx': 'text',
  'pdf': 'text'
};

// 获取文件类型
export const getFileType = (fileName: string): string => {
  const ext = fileName.split('.').pop()?.toLowerCase() || '';
  return FILE_TYPE_MAP[ext] || 'text';
};

// 获取文件大小
export const getFileSize = (bytes: number): string => {
  if (bytes === 0) return '0 Bytes';
  const k = 1024;
  const sizes = ['Bytes', 'KB', 'MB', 'GB'];
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
};

// 创建存储目录（仅在Node.js环境中）
export const createStorageDirectories = (basePath: string) => {
  if (isBrowser) {
    console.log('浏览器环境，跳过目录创建');
    return;
  }

  const path = require('path');
  const fs = require('fs');

  const types = ['image', 'video', 'audio', 'text', 'markdown'];

  types.forEach(type => {
    const typePath = path.join(basePath, type);
    if (!fs.existsSync(typePath)) {
      fs.mkdirSync(typePath, { recursive: true });
    }
  });
};

// 保存文件（仅在Node.js环境中）
export const saveFile = async (
  file: File, 
  category: string, 
  storagePath: string
): Promise<{ filePath: string; fileName: string }> => {
  if (isBrowser) {
    console.log('浏览器环境，跳过文件保存');
    return { filePath: '', fileName: file.name };
  }

  const path = require('path');
  const fs = require('fs');

  const fileType = getFileType(file.name);
  const id = Date.now().toString();
  const fileName = `${id}_${file.name}`;
  const filePath = path.join(storagePath, fileType, fileName);

  // 确保目录存在
  const dir = path.dirname(filePath);
  if (!fs.existsSync(dir)) {
    fs.mkdirSync(dir, { recursive: true });
  }

  // 保存文件
  const arrayBuffer = await file.arrayBuffer();
  const buffer = Buffer.from(arrayBuffer);
  fs.writeFileSync(filePath, buffer);

  return { filePath, fileName };
};

// 删除文件（仅在Node.js环境中）
export const deleteFile = (filePath: string): boolean => {
  if (isBrowser) {
    console.log('浏览器环境，跳过文件删除');
    return false;
  }

  try {
    const fs = require('fs');
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
      return true;
    }
    return false;
  } catch (error) {
    console.error('删除文件失败:', error);
    return false;
  }
};

// 获取文件信息（仅在Node.js环境中）
export const getFileInfo = (filePath: string) => {
  if (isBrowser) {
    console.log('浏览器环境，跳过文件信息获取');
    return null;
  }

  try {
    const fs = require('fs');
    const stats = fs.statSync(filePath);
    return {
      size: stats.size,
      sizeFormatted: getFileSize(stats.size),
      created: stats.birthtime,
      modified: stats.mtime
    };
  } catch (error) {
    console.error('获取文件信息失败:', error);
    return null;
  }
};

// 验证文件类型
export const validateFileType = (file: File, allowedTypes: string[]): boolean => {
  const fileType = getFileType(file.name);
  return allowedTypes.includes(fileType);
};

// 验证文件大小
export const validateFileSize = (file: File, maxSize: number): boolean => {
  return file.size <= maxSize;
}; 